home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / win_os2.swg / 0039_Offscreen Bitmaps-Windows.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-25  |  2KB  |  90 lines

  1. {
  2. From: peter.gruhn@delta.com (Peter Gruhn)
  3.  
  4.  Ka> I've had little luck in finding out how to do more general drawing in
  5.  Ka> an offscreen bitmap (say, with a compatible bitmap created from an
  6.  Ka> HWindow's DC).
  7.  
  8. I'm assuming you have a DC already off screen that you can blit from?
  9. You can draw to it too. Just like a normal DC. I'm worrying now that I
  10. don't quite understand either your problem or just what your code looks
  11. like.
  12.  
  13.  Ka> Many thanks for your help.
  14.  
  15. Hey, it's late, I'll see what I can write...there didn't take long. I
  16. was able to draw rectangles off screen and blit them to the main window.
  17. You ought to be able to do whatever drawing function you want. I took
  18. some short cuts regarding colour depth and bitmap size (hard coding
  19. rules OK!)
  20.  
  21. by Peter Gruhn
  22.  it's small and useless and stupid and somebody
  23.  might find it useful, so I release this program
  24.  into the public domain for the good of all
  25.  sentient species the universe over. 7-8-1994
  26. }
  27.  
  28. program offscree;
  29.  
  30. {you have tpw not bp? your uses will be a little different}
  31. uses owindows,winprocs,wintypes;
  32.  
  33. type
  34.   TMyApp=object(tapplication)
  35.     procedure initmainwindow; virtual;
  36.     end;
  37.  
  38.   PMyWin=^TMyWin;
  39.   TMyWin=object(TWindow)
  40.     procedure Paint(PaintDC: HDC; var PaintInfo: TPaintStruct); virtual;
  41.     end;
  42.  
  43. procedure TMyApp.initmainwindow;
  44. begin
  45.   mainwindow:=new(pmywin,init(nil,'Try this...'));
  46. end;
  47.  
  48. procedure TMyWin.Paint;
  49. var adc:hdc;
  50.     abmp:hbitmap;
  51.     i:integer;
  52.     s:string;
  53. begin
  54. {Create stuff}
  55.   adc:=createcompatibledc(paintdc);
  56.   {I believe that I am cheating here, by just divving number of bits
  57.    by 2 as I happen to know that right now I am in 16 colour mode.
  58.    You will forgive me.}
  59.   abmp:=createcompatiblebitmap(paintdc,300 div 2,300 div 2);
  60.   abmp:=selectobject(adc,abmp);
  61.  
  62. {Blank off screen bitmap of random data}
  63.   bitblt(adc,0,0,300,300,adc,0,0,whiteness);
  64.  
  65. {Draw something}
  66.   for i:=0 to 1024 do
  67.     begin
  68.     rectangle(adc,random(300),random(300),random(300),random(300));
  69.     str(i:5,s);                    {textify i for...}
  70.     s[6]:=#0;                      {null terminator}
  71.     textout(paintdc,10,10,@(s[1]),byte(s[0])); {just to count so it don't look
  72. plain}
  73.     end;
  74.  
  75. {blit it to the window}
  76.   bitblt(paintdc,10,10,300,300,adc,0,0,srccopy);
  77.  
  78. {Kill stuff}
  79.   deleteobject(selectobject(adc,abmp));
  80.   deletedc(adc);
  81. end;
  82.  
  83. var app:TMyApp;
  84.  
  85. begin
  86.   app.init('frog');
  87.   app.run;
  88.   app.done;
  89. end.
  90.